package com.wxisme.ssm.util;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
 *多文件压缩
 *@author wxisme
 *@time 2015-9-24 下午5:13:32
 */

public final class FilesToZip {
	
	private FilesToZip(){}
	
	/**
	 * 压缩多个文件到一个zip文件中
	 * @param files 待压缩文件数组
	 * @param zipFilePath 压缩后的zip文件路径
	 * @param fileName zip文件的名字
	 * @return 是否成功
	 */
	public static boolean fileToZip(File[] files,String zipFilePath,String fileName){
		boolean flag = false;
		FileInputStream fis = null;
		BufferedInputStream bis = null;
		FileOutputStream fos = null;
		ZipOutputStream zos = null;
		
		try {
			File zipFile = new File(zipFilePath + "/" + fileName +".zip");
			if(zipFile.exists()) {
				zipFile.delete();
			}
			File[] sourceFiles = files;
			fos = new FileOutputStream(zipFile);
			zos = new ZipOutputStream(new BufferedOutputStream(fos));
			byte[] bufs = new byte[1024*10];
			for(int i=0;i<sourceFiles.length;i++){
				//创建ZIP实体，并添加进压缩包
				ZipEntry zipEntry = new ZipEntry(sourceFiles[i].getName());
				zos.putNextEntry(zipEntry);
				//读取待压缩的文件并写进压缩包里
				fis = new FileInputStream(sourceFiles[i]);
				bis = new BufferedInputStream(fis, 1024*10);
				int read = 0;
				while((read=bis.read(bufs, 0, 1024*10)) != -1){
					zos.write(bufs,0,read);
				}
			}
			flag = true;		
				
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		} catch (IOException e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		} finally{
			//关闭流
			try {
				if(null != bis) bis.close();
				if(null != zos) zos.close();
			} catch (IOException e) {
				e.printStackTrace();
				throw new RuntimeException(e);
			}
		}
		
		return flag;
	}

}
